package com.note.app.repository;

import com.note.app.document.NoteContent;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

/**
 * 笔记内容MongoDB存储库
 */
@Repository
public interface NoteContentRepository extends MongoRepository<NoteContent, String> {
    
    /**
     * 根据笔记ID查找最新内容
     * 
     * @param noteId 笔记ID
     * @return 笔记内容
     */
    Optional<NoteContent> findTopByNoteIdOrderByVersionDesc(Long noteId);
    
    /**
     * 根据笔记ID查找所有历史内容
     * 
     * @param noteId 笔记ID
     * @return 笔记内容列表
     */
    List<NoteContent> findByNoteIdOrderByVersionDesc(Long noteId);
    
    /**
     * 根据笔记ID和版本号查找内容
     * 
     * @param noteId 笔记ID
     * @param version 版本号
     * @return 笔记内容
     */
    Optional<NoteContent> findByNoteIdAndVersion(Long noteId, Integer version);
    
    /**
     * 删除笔记的所有内容
     * 
     * @param noteId 笔记ID
     */
    void deleteByNoteId(Long noteId);

    /**
     * 根据内容包含特定关键词查询
     *
     * @param keyword 关键词
     * @return 内容列表
     */
    @Query("{ 'content' : { $regex: ?0, $options: 'i' } }")
    List<NoteContent> findByContentContaining(String keyword);
} 